package com.zhang.bingmei_incomeexpenditure.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhang.bingmei_incomeexpenditure.entity.comCity.CommCity;
import com.zhang.bingmei_incomeexpenditure.entity.commom.DataScope;
import com.zhang.bingmei_incomeexpenditure.entity.user.User;
import com.zhang.bingmei_incomeexpenditure.mapper.CommCityMapper;
import com.zhang.bingmei_incomeexpenditure.service.CommCityService;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class CommCityServiceImpl extends ServiceImpl<CommCityMapper, CommCity> implements CommCityService {

    /**
     * 根据DataScope的area字段模糊查询并去重
     * @param dataScope
     * @param user
     * @return
     */
    @Override
    public List<String> listByDataScopeArea(DataScope dataScope, User user) {

        if (user==null || StringUtils.isEmpty(user.getUserId())){
            throw new RuntimeException("用户信息不能为空");
        }
        String userRole = user.getRoleName();
        if (userRole == null){
            userRole = "4";
            // 实际上如果没有数据就抛异常
        }
        System.out.println("userRole:"+userRole);

        // 1. 校验入参
        if (dataScope == null || StringUtils.isEmpty(dataScope.getArea())) {
            return new ArrayList<>();
        }

        // 2. 获取完整area字符串（如"userId=1 minLevel=3时 -> area="460000,460100" "）
        String area = dataScope.getArea();
        System.out.println("level_code:"+area);

        // 3. 构建查询条件：level_code LIKE 'area%'（不拆分，直接用完整字符串匹配）
        QueryWrapper<CommCity> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("DISTINCT level_code")// 仅查询level_code并去重
                .eq("deleted", 0)
                .likeRight("level_code", area); // 等价于 SQL: select DISTINCT level_code from comm_city where level_code LIKE '460100,460200%'

        // 4. 执行查询
        List<CommCity> cityList = baseMapper.selectList(queryWrapper);
        HashSet cityListCode = new HashSet<>();

        for (CommCity tmp : cityList) {
            String[] codesList = tmp.getLevelCode().split(",");
            System.out.println("去重前的codesList："+Arrays.toString(codesList));

            if (userRole.equals("-1") ){
                log.debug("用户无角色，已返回空列表...");
                return Collections.emptyList();
                //throw new RuntimeException("用户无角色");

                // 1：系统管理员  2：省级管理员
            }else if(userRole.equals("1") || userRole.equals("2") && codesList.length >= 2){
                // 看到的列表是全省的市辖区，依次显示海口市秀英区、海口龙华区等海南所有的市县区(不含街道，乡镇)
                if (codesList[1].equals("460100") || codesList[1].equals("460200") || codesList[1].equals("460300") && codesList.length >= 3){
                    // 海口、三亚、三沙展示区：（直接展示海口市就注释掉）
                    cityListCode.add(codesList[2]);
                }
                cityListCode.add(codesList[1]);

                // 3：市县级管理员
            }else if(userRole.equals("3") && codesList.length >= 3){
                // ①海口市460100、三亚市460200、三沙市460300 看到各区的数据
                // 海南省，海口市，龙华区
                if (codesList[1].equals("460100") || codesList[1].equals("460200") || codesList[1].equals("460300")){
                    cityListCode.add(codesList[2]);
                }
                // ②其他市县仅看到本市县的数据(含乡镇、街道)
                // 海南省，安定县，定城镇
                cityListCode.add(codesList[2]);

                // 4: 区级管理员
            } else if (userRole.equals("4") && codesList.length >= 4) {
                cityListCode.add(codesList[3]);
            }

        }
        cityListCode.forEach(System.out::println);

        List<String> result = new ArrayList<>();

        System.out.println("result结果如下：");
        for (Object o : cityListCode) {
            result.add(o.toString());
        }

        // 5. 返回结果
        return result;

    }

    @Override
    public List<CommCity> selectList(QueryWrapper<CommCity> queryWrapper) {
        return Collections.emptyList();
    }

//    @Override
//    public List<CommCity> getAll() {
//        return Collections.emptyList();
//    }
    // 无需实现方法，ServiceImpl已提供所有功能


}
